package com.lyncs.ods.modules.company.service;

import com.lyncs.ods.modules.company.model.CompanyInfo;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lyncs.ods.modules.txn.model.TxnCommonInfo;
import com.lyncs.ods.resp.CompanyShortInfoResp;

import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 公司账号信息表 服务类
 * </p>
 *
 * @author alex
 * @since 2022-03-29
 */
public interface CompanyInfoService extends IService<CompanyInfo> {

    /**
     * 获取登录企业名称
     *
     * @return name
     */
    String getLoginCompanyName();

    /**
     * 获取企业信息
     *
     * @param companyId companyId
     * @param status    status
     * @return 企业信息
     */
    CompanyInfo getCompanyInfo(Long companyId, Integer status);

    /**
     * 批量获取可用企业信息
     *
     * @param companyIds companyIds
     * @return 企业信息
     */
    List<CompanyInfo> getAvailableCompanyInfos(List<Long> companyIds);

    /**
     * 获取可用企业信息
     *
     * @param companyId companyId
     * @return 企业信息
     */
    CompanyInfo getAvailableCompanyInfo(Long companyId);

    /**
     * 获取交易单据中双方企业的信息
     *
     * @param list list
     * @param <T>  T
     * @return company infos
     */
    <T extends TxnCommonInfo> Map<Long, CompanyInfo> getTxnCompanyInfos(@NotNull List<T> list);

    /**
     * 批量获取企业信息
     *
     * @param companyIds companyIds
     * @param status     status
     * @param sortSql    sortSql
     * @return 企业信息
     */
    List<CompanyInfo> getCompanyInfos(List<Long> companyIds, Integer status, @NotNull String sortSql);

    /**
     * 获取有效企业信息
     *
     * @param companyId companyId
     * @return 企业信息
     */
    CompanyInfo getValidCompanyInfo(Long companyId);

    <T extends TxnCommonInfo> List<String> getNotifyEmail(T t);

    <T extends TxnCommonInfo> List<String> getNotifyPhone(T t);

    <T extends TxnCommonInfo> List<String> getNotifyEmail(List<T> list);

    <T extends TxnCommonInfo> List<String> getNotifyPhone(List<T> list);

    <T extends TxnCommonInfo> Map<Long, CompanyShortInfoResp> getTxnCompanyRespInfos(List<T> list);


}
